<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unit Testing Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 2.1.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
Unit Testing Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>단위테스트 Unit Testing Class</h1>

<p>단위테스트는 소프트웨어 개발의 접근방법중 하나이며, 여러분의 프로그램내의 각 함수마다 테스트를 작성하는것입니다.
이런 컨셉이 익숙하지않으시면 인터넷검색을 통해서 먼저 알아보시는것이 좋습니다.</p>

<p>CodeIgniter의 단위테스트 클래스는 매우 심플하며 ,검사함수와 두개의 결과함수로 이루어져 있습니다.또한 완전한 단위테스트 수트(suite)는 아니며 ,여러분의 코드가 올바른 데이터형 및 올바른 결과를 생성하는지 검증하는 단순한 방법을 제공하는데 초점이맞추어져 있습니다.
</p>


<h2>클래스 초기화 Initializing the Class</h2>

<p>다른 클래스들과 마찬가지로 , 단위테스트 클래스도 컨트롤러에서 <dfn>$this->load->library</dfn> 함수를 통해 초기화 합니다:</p>

<code>$this->load->library('unit_test');</code>
<p>일단 로드되면 단위테스트 객체는  <dfn>$this->unit  </dfn>로 사용하실 수 있습니다.</p>


<h2>테스트 실행 Running Tests</h2>

<p>아래 나오는 함수에 테스트와, 예상되는 결과를 넘겨주는것으로 테스트를 실행할수 있습니다:</p>

<h2>$this->unit->run( <var>test</var>, <var>expected result</var>, '<var>test name</var>', '<var>notes</var>');</h2>  
  <p><var>test</var> 는 여러분이 테스트하기를 위하는 코드의 결과이며, <var>expected result</var> 는 
    예상하는 결과(혹은 데이터형), 그리고 <var>test name</var> 은 선택사항으로서 여러분의 테스트에 이름을 부여할때 사용합니다.또한 
    메모를 입력하고 싶다면 <var>notes</var> 부분에 입력하세요.</p>
<p>예:</p>
<code>$test = 1 + 1;<br />
<br />
$expected_result = 2;<br />
<br />
$test_name = 'Adds one plus one';<br />
<br />
$this->unit->run($test, $expected_result, $test_name);</code>

<p>글자그대로 일치하는것을 검사하는지 데이터형이 일치하는것을 검사하는지에 따라서 ' 예상되는 결과'부분은 달라집니다. <br />
  아래는 
  글자그대로가 일치하는지 검사합니다:</p>

<code>$this->unit->run('Foo', 'Foo');</code>

<p>아래는 데이터형이 일치하는지를 검사합니다:</p>

<code>$this->unit->run('Foo', 'is_string');</code>

<p>두번째 파라미터로"is_string"을 사용했다는걸 아실수 있겠지요 .이것은 테스트(test)가 문자열을 결과로 생성하는지 여부를 검증해라 라고 하는것과 같습니다.<br />
  아래는 각 타입별 파라미터값입니다
  :</p>

  <ul>
    <li>is_object</li>
    <li>is_string</li>
    <li>is_bool</li>
    <li>is_true</li>
    <li>is_false</li>
    <li>is_int</li>
    <li>is_numeric</li>
    <li>is_float</li>
    <li>is_double</li>
    <li>is_array</li>
    <li>is_null</li>
  </ul>


<h2>리포트 생성 Generating Reports</h2>

<p>여러분은 테스트결과를 각 테스트수행후 볼수도 있고, 여러개의 테스트를 수행한후 마지막으로 리포트를 생성하게 할수도 있습니다.
직접적이고 심플하게 리포트를 표시하려면 <var>run</var>를 echo 나 return  하시면 됩니다:</p>

<code>echo $this->unit->run($test, $expected_result);</code>

<p>모든테스트에 대한 전체 리포트를 보시려면 아래와같이 합니다:</p>

<code>echo $this->unit->report();</code>

<p>리포트는 HTML 테이블 형태로 생성됩니다.  만약 원래데이터만 보시려면 아래함수로 배열을 추출해 낼 수 있습니다:</p>

<code>echo $this->unit->result();</code>


<h2>엄격 모드 Strict Mode</h2>

<p>기본값으로, 단위테스트클래스는 '글자그대로일치'를 느슨하게 검사합니다. 아래 예제를 보세요:</p>

<code>$this->unit->run(1, TRUE);</code>

<p>테스트는 정수를 검사하나, 예상되는 값으로는 불린(boolean) 값을 넘겨주었습니다.  그러나 , PHP의 느슨한 데이터형 설정(data-typing) 때문에 일반적인 일치테스트를 사용하게되어 위 결과는 TRUE 가 됩니다:</p>

<code>if (1 == TRUE) echo 'This evaluates as true';</code>

<p>원한다면 단위테스트클래스를 엄격모드로 설정할수 있습니다. 그러면 데이터형과 값을  동시에 검사합니다.:</p>

<code>if (1 === TRUE) echo 'This evaluates as FALSE';</code>

<p>엄격모드를 활성화 하려면 아래와 같이 합니다:</p>

<code>$this->unit->use_strict(TRUE);</code>

<h2>단위테스트 활성/비활성화 Enabling/Disabling Unit Testing</h2>

<p>테스트 코드를 프로그램안에 남겨두되 , 원할때만 수행되도록 하려면, 아래함수를 사용하여 테스팅을 비활성화 할수 있습니다:</p>

  <code>$this->unit->active(FALSE)</code> 
  <h2>단위 테스트의 결과 표시</h2>

  <p>단위 테스트의 결과는 다음 항목이 기본적으로 표시됩니다 :</p>

  <ul>
    <li>테스트 이름 (test_name)</li>
    <li>테스트 데이터 형식 (test_datatype)</li>
    <li>예상하는 데이터 형식 (res_datatype)</li>
    <li>결과 (result)</li>
    <li>파일 이름 (file)</li>
    <li>행 번호 (line)</li>
    <li>사용자가 테스트에 입력한 메모(notes)</li>
  </ul>
  <kbd>$this->unit->set_items()</kbd>를 이용해서 어떤 항목이 표시될지 설정할 수 있습니다.만약, 테스트 이름과 
  결과만을 표시하려면 :</p> 
  <h3>테스트 결과 표시 설정</h3>

<code>
	$this->unit->set_test_items(array('test_name', 'result'));
</code>


<h2>템플릿 제작 Creating a Template</h2>

<p>테스트결과의 포멧을 기본설정과 다르게 하고싶다면 직접 템플릿을 작성하실 수 있습니다.여기 간단한 템플릿 예제가 있습니다  .  반드시 필요한 모조변수(pseudo-variables)에 주의하세요:</p>

<code>
$str = '<br />
&lt;table border="0" cellpadding="4" cellspacing="1"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<kbd>{rows}</kbd><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td><kbd>{item}</kbd>&lt;/td><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td><kbd>{result}</kbd>&lt;/td><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr><br />
&nbsp;&nbsp;&nbsp;&nbsp;<kbd>{/rows}</kbd><br />
&lt;/table>';<br />
<br />
$this->unit->set_template($str);
</code>

<p class="important"><strong>참고:</strong> 템플릿은 단위테스트를 수행하기전에 선언되어야 합니다.</p>





</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="typography.html">Typography Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="uri.html">URI Class</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>